package gui;

import com.thoughtworks.xstream.XStream;
import java.io.File;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;

import ge.escola.Disciplina;
import ge.escola.Escola;
import ge.escola.Laboratorio;
import ge.escola.Serie;
import ge.escola.Turma;
import ge.usuarios.Aluno;
import ge.usuarios.Diretor;
import ge.usuarios.Funcionario;
import ge.usuarios.Professor;
import gui.funcionarios.DiretorPanel;
import gui.funcionarios.FotoPanel;
import gui.funcionarios.FuncionarioPanel;
import gui.funcionarios.ProfessorPanel;
import ge.escola.Sala;

import java.util.ArrayList;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class GerenciadorDeJanelas {
	// Objetos da gui
	public static JFrame window;
	public static JPanel firstUse;
	public static JPanel primeiroMenu;
	public static JPanel menuCadastra;
	public static JPanel cadastraFuncionario;
	public static JPanel cadastraProfessor;
	public static JPanel cadastraDiretor;
	public static JPanel cadastraAlunoPanel;
	public static JPanel cadastraLaboratorioPanel;
	public static JPanel cadastraSerie;
	public static JPanel cadastraTurma;
	public static JPanel cadastraDisciplina;
	public static JPanel menuVisualiza;
	public static JPanel visualizaAluno;
	public static JPanel cadastraSala;
	public static JPanel menuAltera;
	public static JPanel selecionaFuncionario;
	public static JPanel consultaEscola;
	public static JPanel alteraEscola;
	public static JPanel alteraSala;
	public static JPanel consultaSala;
	public static JPanel selecionaDisciplina;
	public static JPanel alteraDisciplina;
	public static JPanel selecionaTurma;
	public static JPanel alteraTurma;
	public static JPanel selecionaSerie;
	public static JPanel alteraSerie;
	public static JPanel horarioTurma;
	public static JPanel selecionaLaboratorio;
	public static JPanel alteraLaboratorio;
	
	// public static JPanel selecionaFoto;
	public static Diretor diretor;
	public static Escola escola = null;

	// Arquivos a serem salvos, correspondentes as list abaixo
	public static File arquivoDeMatriculas = new File("matriculas.xml");
	public static File arquivoDeFuncionarios = new File("funcionarios.xml");
	public static File arquivoDeProfessores = new File("professores.xml");
	public static File arquivoDeDisciplinas = new File("disciplinas.xml");
	public static File arquivoDeSalas = new File("salas.xml");
	public static File arquivoDeAlunos = new File("alunos.xml");
	public static File arquivoDeLaboratorios = new File("laboratorio.xml");
	public static File arquivoDeSeries = new File("series.xml");
	public static File arquivoDeTurmas = new File("turmas.xml");
	public static File arquivoEscola = new File("escola.xml");
	public static File arquivoDiretor = new File("diretor.xml");
	public static final XStream ARQUIVADOR = new XStream();

	// Lists com os dados da percistencias
	public static List<Integer> todasMatriculas = new ArrayList<Integer>();
	public static List<Funcionario> todosFuncionarios = new ArrayList<Funcionario>();
	public static List<Professor> todosProfessores = new ArrayList<Professor>();
	public static List<Disciplina> todasDisciplinas = new ArrayList<Disciplina>();
	public static List<Sala> todasSalas = new ArrayList<Sala>();
	public static List<Aluno> todosAlunos = new ArrayList<Aluno>();
	public static List<Laboratorio> todosLabs =  new ArrayList<Laboratorio>();
	public static List<Serie> todasSeries = new ArrayList<Serie>();
	public static List<Turma> todasTurmas = new ArrayList<Turma>();

	/**
	 * @param args
	 *            the command line arguments
	 */
	public static void main(String[] args) {
		System.setProperty("file.encoding", "UTF-8");

		primeiroMenu = new PrimeiroMenu();
		menuCadastra = new MenuCadastra();
		cadastraFuncionario = new FuncionarioPanel();
		cadastraProfessor = new ProfessorPanel();
		cadastraDiretor = new DiretorPanel();
		cadastraAlunoPanel = new CadastraAlunoPanel();
		cadastraLaboratorioPanel = new CadastraLaboratorioPanel();
		cadastraSala = new CadastraSala();
		cadastraSerie = new CadastraSeriePanel();
		cadastraTurma = new CadastraTurmaPanel();
		cadastraDisciplina = new CadastraDisciplinaPanel();
		menuAltera = new MenuAltera();
		
		// selecionaFoto = new FotoPanel();

		firstUse = new PrimeiroAcesso();
		firstUse.setVisible(true);

		window = new Janela();
		window.setTitle("Gerenciador de escolas - V4.37");
		window.setVisible(true);
		window.setPreferredSize(new java.awt.Dimension(800, 600));
		window.setSize(800, 600);

		// Carregando dados ----------------------------------------
		if (leitor(arquivoDeMatriculas) != null) {
			todasMatriculas = (ArrayList<Integer>) ARQUIVADOR
					.fromXML(leitor(arquivoDeMatriculas));
		}

		if (leitor(arquivoDeAlunos) != null) {
			todosAlunos = (ArrayList<Aluno>) ARQUIVADOR
					.fromXML(leitor(arquivoDeAlunos));
		}

		if (leitor(arquivoDeDisciplinas) != null) {
			todasDisciplinas = (ArrayList<Disciplina>) ARQUIVADOR
					.fromXML(leitor(arquivoDeDisciplinas));
		}

		if (leitor(arquivoDeFuncionarios) != null) {
			todosFuncionarios = (ArrayList<Funcionario>) ARQUIVADOR
					.fromXML(leitor(arquivoDeFuncionarios));
		}

		if (leitor(arquivoDeProfessores) != null) {
			todosProfessores = (ArrayList<Professor>) ARQUIVADOR
					.fromXML(leitor(arquivoDeProfessores));
		}

		if (leitor(arquivoDeSalas) != null) {
			todasSalas = (ArrayList<Sala>) ARQUIVADOR
					.fromXML(leitor(arquivoDeSalas));
		}
		
		if (leitor(arquivoDeLaboratorios) != null) {
			todosLabs = (ArrayList<Laboratorio>) ARQUIVADOR
					.fromXML(leitor(arquivoDeLaboratorios));
		}
		
		if (leitor(arquivoDeSeries) != null) {
			todasSeries = (ArrayList<Serie>) ARQUIVADOR
					.fromXML(leitor(arquivoDeSeries));
		}
		
		if (leitor(arquivoDeTurmas) != null) {
			todasSeries = (ArrayList<Serie>) ARQUIVADOR
					.fromXML(leitor(arquivoDeTurmas));
		}

		if (leitor(arquivoEscola) == null) {
			window.setContentPane(firstUse);
		} else {
			escola = (Escola) ARQUIVADOR.fromXML(leitor(arquivoEscola));
			GerenciadorDeJanelas.window.setVisible(false);
			GerenciadorDeJanelas.window
					.setContentPane(GerenciadorDeJanelas.primeiroMenu);
			GerenciadorDeJanelas.window.setVisible(true);
		}
		if(leitor(arquivoDiretor) != null){
			diretor = (Diretor) ARQUIVADOR.fromXML(leitor(arquivoDiretor));
		}

	}

	public static BufferedReader leitor(File arquivoOrigem) {
		BufferedReader reader = null;
		try {
			if (!(arquivoOrigem.canRead())) {
				return null;
			}
			FileReader leitor = new FileReader(arquivoOrigem);
			reader = new BufferedReader(leitor);

		} catch (IOException ex) {
			System.err.println("Arquivo nao existe !");
			return null;

		}
		return reader;

	}

	public static void gravar(File arquivoDestino, String xml) {
		try {

			FileWriter writer = new FileWriter(arquivoDestino);
			PrintWriter saida = new PrintWriter(writer);
			saida.println(xml);
			saida.close();
			writer.close();
		} catch (IOException ex) {
			System.err.println("Gravacao nao foi possivel !");
		}
	}
}